package com.ruicar.afs.cloud.afscase.processor.service;

import com.alibaba.fastjson.JSONObject;
import com.ruicar.afs.cloud.afscase.approvetask.entity.WorkProcessScheduleInfo;
import com.ruicar.afs.cloud.afscase.approvetask.entity.WorkProcessScheduleInfoTemp;
import com.ruicar.afs.cloud.afscase.processor.vo.NormalTaskSubmitVO;
import com.ruicar.afs.cloud.common.core.enums.AfsBaseEnum;
import com.ruicar.afs.cloud.common.modules.afscorebusiness.enums.BusinessStateInEnum;
import com.ruicar.afs.cloud.workflow.api.dto.flowprocess.WorkFlowResponse;

/**
 * @description: 在这里添加方法的注释
 * @author jiaqi.guo
 * @created 2020/7/27 19:21
 * @version 1.0
 */
public interface ChangeAssetsWorkflowService {

    /**
     * 流程发起
     * @param temp
     * @return
     */
    WorkFlowResponse start(WorkProcessScheduleInfoTemp temp);

    /**
     * 提交
     * @param submitVO
     * @return
     */
    void submit(NormalTaskSubmitVO submitVO);


    /**
     * 流程撤销(审批过程外撤销)
     * @param stageId
     * @return
     */
    WorkFlowResponse cancelFlow(String stageId, String message);

    /**
     * 建议拒绝
     * @param submitVO
     */
     void reject(NormalTaskSubmitVO submitVO) ;
    /**
     * 建议同意/建议通过
     * @param submitVO
     */
    void check(NormalTaskSubmitVO submitVO)  ;
    /**
     * 提交成功修改数据
     * @param
     */
    void afterSubmit(WorkFlowResponse resp) ;

    /**
     * 流程推进 复议和资产变更
     * @param submitButtonEnum
     * @param submitVO
     * @return
     */
    WorkFlowResponse pushWorkflow(Enum<? extends AfsBaseEnum> submitButtonEnum, NormalTaskSubmitVO submitVO) ;

    /** 复议和资产变更保存日志
     * @param stateInEnum
     * @param submitVO
     */
     void changeCaseStatusAndSaveRecord(BusinessStateInEnum stateInEnum, NormalTaskSubmitVO submitVO) ;

    /**
     * 业务数据获取
     * @param applyNo
     * @return
     */
     JSONObject getBusinessData(String applyNo);

    /**
     * 退回
     * @param submitVO
     */
    void sendBack(NormalTaskSubmitVO submitVO);

    /**
     * 经销商退回
     * @param submitVO
     */

    void sendBackToDealer(NormalTaskSubmitVO submitVO);

    /**
     * 核准
     * @param submitVO
     */
    void checkFinal(NormalTaskSubmitVO submitVO);

    /**
     * 校验金额
     * @param applyNo
     */
    void checkApproveAmountLimit(String applyNo);

    /**
     * 拒绝
     * @param submitVO
     */
    void rejectFinal(NormalTaskSubmitVO submitVO);

}
